from PyQt5.Qt import *
import pandas as pd

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("东圣磷矿数据分析")
        self.resize(590, 960)
        self.setup_ui()

    def setup_ui(self):
        layout = QVBoxLayout()  # 界面总的布局是一个垂直布局  然后在布局里面添加东西

        # 精矿识别率
        wgt_JinShi = QWidget()
        self.layout_JinShi = QHBoxLayout()  # 布局里面再放文本框和文本输入框
        self.btnSubmit_JinShi = QLabel("精矿识别率")
        self.lineEdit_JinShi = QLineEdit("0.75")
        self.layout_JinShi.addWidget(self.btnSubmit_JinShi)
        self.layout_JinShi.addWidget(self.lineEdit_JinShi)
        wgt_JinShi.setLayout(self.layout_JinShi)

        #尾矿识别率
        wgt_WeiShi = QWidget()
        self.layout_WeiShi = QHBoxLayout()  # 布局里面再放文本框和文本输入框
        self.btnSubmit_WeiShi = QLabel("尾矿识别率")
        self.lineEdit_WeiShi = QLineEdit("0.90")
        self.layout_WeiShi.addWidget(self.btnSubmit_WeiShi)
        self.layout_WeiShi.addWidget(self.lineEdit_WeiShi)
        wgt_WeiShi.setLayout(self.layout_WeiShi)

        #精矿品味
        wgt_JinP = QWidget()
        self.layout_JinP = QHBoxLayout()  # 布局里面再放文本框和文本输入框
        self.btnSubmit_JinP = QLabel("精矿品味")
        self.lineEdit_JinP = QLineEdit("0.28")
        self.layout_JinP.addWidget(self.btnSubmit_JinP)
        self.layout_JinP.addWidget(self.lineEdit_JinP)
        wgt_JinP.setLayout(self.layout_JinP)

        #尾矿品味
        wgt_WeiP = QWidget()
        self.layout_WeiP = QHBoxLayout()  # 布局里面再放文本框和文本输入框
        self.btnSubmit_WeiP = QLabel("尾矿品味")
        self.lineEdit_WeiP = QLineEdit("0.08")
        self.layout_WeiP.addWidget(self.btnSubmit_WeiP)
        self.layout_WeiP.addWidget(self.lineEdit_WeiP)
        wgt_WeiP.setLayout(self.layout_WeiP)

        #分析按钮
        self.anlasysBtn=QPushButton("分析按钮")

        #下面显示的列表控件
        #尾矿品味
        self.wgt_dataframe = QWidget()

        width=150
        height=30
        wgt_JinShi.setFixedSize(width,height)#设置widgit的大小
        layout.addWidget(wgt_JinShi)
        wgt_WeiShi.setFixedSize(width,height)
        layout.addWidget(wgt_WeiShi)
        wgt_JinP.setFixedSize(width, height)
        layout.addWidget(wgt_JinP)
        wgt_WeiP.setFixedSize(width,height)
        layout.addWidget(wgt_WeiP)
        self.anlasysBtn.setFixedSize(width,height*2/3)

        self.tableView = QTableView()
        self.tableView.verticalHeader().setDefaultSectionSize(5)#设置表格竖直方向大小
        self.tableView.horizontalHeader().setDefaultSectionSize(75)  # 设置表格竖直方向大小

        layout.addWidget(self.anlasysBtn)
        layout.addWidget(self.wgt_dataframe)

        self.anlasysBtn.clicked.connect(self.analyze)#这个是分析按钮
        self.setLayout(layout)#总布局

    def analyze(self):
        JingShi=float(self.lineEdit_JinShi.text())
        WeiShi=float(self.lineEdit_WeiShi.text())
        JingPin=float(self.lineEdit_JinP.text())
        WeiPin=float(self.lineEdit_WeiP.text())
        print("输入的数据:",JingShi, WeiShi, JingPin, WeiPin)
        def cal(x):
            #print("废石占比:", x)
            # 假设x是废石占比，总石头为1，那么里面的矿石就是 1-x 这里用变量t表示
            t = 1 - x  # 矿石

            # 拋费率=仓2/（仓1+仓2）
            # 仓1=矿石分对了+废石分错了
            cang1Kuang = t * JingShi  # 矿石分对了
            cang1Fei = (1 - t) * (1 - WeiShi)  # 废石分错了，这个指标就是精中尾
            #print("精中尾：", cang1Fei)
            cang1 = cang1Kuang + cang1Fei

            # 仓2=矿石分错了+废石分对了
            cang2Kuang = t * (1 - JingShi)  # 矿石分错了,这个指标就是尾中精
            #print("尾中精：", cang2Kuang)
            cang2Fei = (1 - t) * WeiShi  # 废石分对了
            cang2 = cang2Kuang + cang2Fei

            # 拋费率=仓2/（仓1+仓2）
            PaoFeiLv = cang2 / (cang1 + cang2)
            #print("拋费率:", PaoFeiLv)

            # 精矿品味=仓1中的金属/仓1中的总石头=（仓1中的矿*精矿品味+仓1中的废*废矿品味）/仓1中总石头
            cang1JinShu = (cang1Kuang * JingPin + cang1Fei * WeiPin)
            JingKuangPin = cang1JinShu / cang1
            #print("计算的精矿品味：", JingKuangPin)

            # 尾矿品味=仓2中的金属/仓2中的总石头=（仓2中的矿*精矿品味+仓2中的废*废矿品味）/仓2中总石头
            cang2JinShu = (cang2Kuang * JingPin + cang2Fei * WeiPin)
            WeiKuangPin = cang2JinShu / cang2
            #print("计算的尾矿品味：", WeiKuangPin)

            # 原矿品味=仓1总的金属+仓2中的金属  因为总石头设为了1
            YuanKuangPin = cang1JinShu + cang2JinShu
            #print("计算的原矿品味：", YuanKuangPin)

            return [x, YuanKuangPin, PaoFeiLv, JingKuangPin, WeiKuangPin, cang1Fei, cang2Kuang]

        name = ["废石占比", "原矿品味", "拋废率", "精矿品味", "尾矿品味", "精中尾", "尾中精"]
        df_cal = pd.DataFrame(columns=name)
        for i in range(92, 20, -2):
            temp = {}
            calst = cal(i * 0.01)
            for j in range(7):
                temp[name[j]] = calst[j]
            # temp["精中尾"],temp["尾中精"],temp["拋费率"],temp["精矿品味"],temp["尾矿品味"],temp["原矿品味"]=cal(i*0.01)
            #print("temp:", temp)
            df_cal = df_cal.append(temp, ignore_index=True)

        for _ in name:
            df_cal[_] = df_cal[_].apply(lambda x: format(x, '.2%'))

        print(df_cal)
        # print(df_cal.shape[0],df_cal.shape[1])
        md=QStandardItemModel(df_cal.shape[0],df_cal.shape[1])
        md.setHorizontalHeaderLabels(name)

        for i in range(df_cal.shape[0]):
            for j in range(df_cal.shape[1]):
                item=QStandardItem(df_cal.iloc[i][j])
                item.setTextAlignment(Qt.AlignHCenter)#设置表格中的文字居中显示
                md.setItem(i,j,item)


        #self.tableView.updateEditorData()
        self.tableView.setModel(md)


        self.layout_dataframe = QHBoxLayout()
        print("控件个数:", self.layout_dataframe.count())
        # if self.layout_dataframe.count()!=0:
        #     self.layout_dataframe.itemAt(0).widget().deleteLater()
        self.layout_dataframe.addWidget(self.tableView)
        print("控件个数:",self.layout_dataframe.count())
        self.wgt_dataframe.setLayout(self.layout_dataframe)




if __name__ == '__main__':
    import sys

    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())